package com.junjin.testwebview;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ClickableSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.UnderlineSpan;
import android.util.Log;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.huawei.hmf.tasks.OnFailureListener;
import com.huawei.hmf.tasks.OnSuccessListener;
import com.huawei.hmf.tasks.Task;
import com.huawei.hms.common.ApiException;
import com.huawei.hms.support.account.AccountAuthManager;
import com.huawei.hms.support.account.request.AccountAuthParams;
import com.huawei.hms.support.account.request.AccountAuthParamsHelper;
import com.huawei.hms.support.account.result.AuthAccount;
import com.huawei.hms.support.account.service.AccountAuthService;
import com.huawei.hms.support.api.entity.common.CommonConstant;

public class LoginActivity extends AppCompatActivity {

    ImageView backView;
    TextView titleView;

    private ImageView agreeImageView;
    private boolean isChecked = true;
    private LinearLayout agreementLayout; // 用户协议布局

    // 华为帐号登录授权服务，提供静默登录接口silentSignIn，获取前台登录视图getSignInIntent，登出signOut等接口
    private AccountAuthService mAuthService;

    // 华为帐号登录授权参数
    private AccountAuthParams mAuthParam;

    // 用户自定义signInIntent请求码
    private static final int REQUEST_CODE_SIGN_IN = 1000;

    // 用户自定义日志标记
    private static final String TAG = "Account";

    public static void actionStart(Context context) {
        Intent intent = new Intent(context, LoginActivity.class);
        context.startActivity(intent);
//        ((Activity)context).overridePendingTransition(R.anim.push,R.anim.pop);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

//        backView = findViewById(R.id.back_img);
//        titleView = findViewById(R.id.toolbar_title);
//
//        backView.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                finish();
//                overridePendingTransition(R.anim.pop_out,R.anim.push_out);
//            }
//        });

        // 华为登录按钮
        View huaweiLoginButton = findViewById(R.id.HuaweiIdAuthButton);
        // 账号登录按钮
//        View accountLoginButton = findViewById(R.id.iv_account_view);
//
//        // 华为登录按钮点击事件
        huaweiLoginButton.setOnClickListener(v -> checkAgreementAndLogin());
//
//        // 账号登录按钮点击事件
//        accountLoginButton.setOnClickListener(v -> checkAgreementAndLogin());
//
//        agreeImageView = findViewById(R.id.choice_agree);
//        agreementLayout = findViewById(R.id.agreementLayout); // 初始化布局
//
//        // 设置点击事件
//        agreeImageView.setOnClickListener(v -> {
//            isChecked = !isChecked;
//            updateCheckboxState();
//        });

        // 初始化状态
        updateCheckboxState();
//
//        // 在Activity中
//        TextView tvAgree = findViewById(R.id.tv_agree);
//        String text = "同意《用户协议》和《隐私政策》";
//        SpannableString spannableString = new SpannableString(text);
//        // 《用户协议》点击事件
//        int start1 = text.indexOf("《用户协议》");
//        int end1 = start1 + "《用户协议》".length();
//        spannableString.setSpan(new ForegroundColorSpan(Color.GREEN), start1, end1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//        spannableString.setSpan(new UnderlineSpan(), start1, end1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//        spannableString.setSpan(new ClickableSpan() {
//            @Override
//            public void onClick(View widget) {
//                // 打开用户协议页面
//                openUserAgreement();
//            }
//        }, start1, end1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//
//// 《隐私政策》点击事件
//        int start2 = text.indexOf("《隐私政策》");
//        int end2 = start2 + "《隐私政策》".length();
//        spannableString.setSpan(new ForegroundColorSpan(Color.GREEN), start2, end2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//        spannableString.setSpan(new UnderlineSpan(), start2, end2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//        spannableString.setSpan(new ClickableSpan() {
//            @Override
//            public void onClick(View widget) {
//                // 打开隐私政策页面
//                openPrivacyPolicy();
//            }
//        }, start2, end2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//
//// 应用到TextView
//        tvAgree.setText(spannableString);
//        tvAgree.setMovementMethod(android.text.method.LinkMovementMethod.getInstance());
//        tvAgree.setHighlightColor(Color.TRANSPARENT);
    }

    private void checkAgreementAndLogin() {
        if (!isChecked) {
            // 未选中协议，显示提示并抖动提醒
//            CustomToast.show(this, "请先同意用户协议和隐私政策");
//            shakeView(agreementLayout);
        } else {
            // 已选中，执行登录逻辑
            // TODO: 这里添加实际的登录逻辑
            silentSignInByHwId();
//            CustomToast.show(this, "正在登录...");
        }
    }

    private void updateCheckboxState() {
//        // 更新图标
//        agreeImageView.setImageResource(
//                isChecked ?
//                        R.drawable.ic_selected : // 选中状态图标
//                        R.drawable.ic_unselected // 未选中状态图标
//        );
    }

    /**
     * 使视图抖动
     */
    private void shakeView(View view) {
//        Animation shakeAnimation = AnimationUtils.loadAnimation(this, R.anim.shake);
//        view.startAnimation(shakeAnimation);
    }

    private void openUserAgreement() {
        String agreementHtml = "file:///android_asset/agreement.html";
//        LocalWebViewActivity.actionStart(this, agreementHtml,getString(R.string.AboutFragment_label_agreement));
    }

    private void openPrivacyPolicy() {
        String privacyHtml = "file:///android_asset/privacy.html";
//        LocalWebViewActivity.actionStart(this, privacyHtml,getString(R.string.AboutFragment_label_privacy));
    }

    /**
     * 静默登录，如果设备上的华为帐号系统已经登录，并且用户已经授权过，无需再拉起登录页面和授权页面，
     * 将直接静默登录成功，在成功监听器中，返回帐号信息;
     * 如果华为帐号系统帐号未登录或者用户没有授权，静默登录会失败，需要显式拉起前台登录授权视图。
     */
    private void silentSignInByHwId() {
        // 1、配置登录请求参数AccountAuthParams，包括请求用户id(openid、unionid)、email、profile（昵称、头像）等。
        // 2、DEFAULT_AUTH_REQUEST_PARAM默认包含了id和profile（昵称、头像）的请求。
        // 3、如需要请求获取用户邮箱，需要setEmail();
        mAuthParam = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM)
                .setEmail()
                .createParams();

        // 使用请求参数构造华为帐号登录授权服务AccountAuthService
        mAuthService = AccountAuthManager.getService(this, mAuthParam);

        // 使用静默登录进行华为帐号登录
        Task<AuthAccount> task = mAuthService.silentSignIn();
        task.addOnSuccessListener(new OnSuccessListener<AuthAccount>() {
            @Override
            public void onSuccess(AuthAccount authAccount) {
                // 静默登录成功，处理返回的帐号对象AuthAccount，获取帐号信息
                dealWithResultOfSignIn(authAccount);
            }
        });
        task.addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {
                // 静默登录失败，使用getSignInIntent()方法进行前台显式登录
                if (e instanceof ApiException) {
                    ApiException apiException = (ApiException) e;
                    Intent signInIntent = mAuthService.getSignInIntent();
                    // 如果应用是全屏显示，即顶部无状态栏的应用，需要在Intent中添加如下参数：
                    // intent.putExtra(CommonConstant.RequestParams.IS_FULL_SCREEN, true);
                    // 具体详情可以参见应用调用登录接口的时候是全屏页面，为什么在拉起登录页面的过程中顶部的状态栏会闪一下？应该如何解决？
                    signInIntent.putExtra(CommonConstant.RequestParams.IS_FULL_SCREEN, true);
                    startActivityForResult(signInIntent, REQUEST_CODE_SIGN_IN);
                }
            }
        });
    }

    /**
     * 处理返回的AuthAccount，获取帐号信息
     *
     * @param authAccount AuthAccount对象，用于记录帐号信息
     */
    private void dealWithResultOfSignIn(AuthAccount authAccount) {
        // 获取帐号信息
        Log.i(TAG, "display name:" + authAccount.getDisplayName());
        Log.i(TAG, "photo uri string:" + authAccount.getAvatarUriString());
        Log.i(TAG, "photo uri:" + authAccount.getAvatarUri());
        Log.i(TAG, "email:" + authAccount.getEmail());
        Log.i(TAG, "openid:" + authAccount.getOpenId());
        Log.i(TAG, "unionid:" + authAccount.getUnionId());
        // TODO 获取用户信息后业务逻辑
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE_SIGN_IN) {
            Log.i(TAG, "onActivitResult of sigInInIntent, request code: " + REQUEST_CODE_SIGN_IN);
            Task<AuthAccount> authAccountTask = AccountAuthManager.parseAuthResultFromIntent(data);
            if (authAccountTask.isSuccessful()) {
                // 登录成功，获取到登录帐号信息对象authAccount
                AuthAccount authAccount = authAccountTask.getResult();
                dealWithResultOfSignIn(authAccount);
                Log.i(TAG, "onActivitResult of sigInInIntent, request code: " + REQUEST_CODE_SIGN_IN);
            } else {
                // 登录失败，status code标识了失败的原因，请参见API参考中的错误码了解详细错误原因
                Log.e(TAG, "sign in failed : " +((ApiException)authAccountTask.getException()).getStatusCode());
            }
        }
    }
}